import apiClient from '@/lib/interceptor';

// 考勤统计查询参数接口
export interface AttendanceStatisticsParams {
  page?: number;
  pageSize?: number;
  employeeId?: string;
  yearMonth?: string; // 统计年月（如2025-02）
  deptId?: number;
  academyId?: number;
  otherDeptId?: number;
}

// 考勤统计数据接口
export interface AttendanceStatistics {
  id: number;
  employeeId: string;
  yearMonth: string;
  lateCount: number;
  leaveEarlyCount: number;
  absentDays: number;
  attendanceDays: number;
  leaveDays: number;
  workingTime: string;
  overTime: string;
}

/**
 * 获取所有员工的考勤统计
 * @param params 查询参数
 * @returns 考勤统计数据
 * 
 * 注意：deptId、academyId、otherDeptId这三个不能同时传，每次最多只能传一个
 */
export const getAttendanceStatistics = async (params?: AttendanceStatisticsParams) => {
  try {
    const response = await apiClient.get('/attendance/statistics', { params });
    return response.data;
  } catch (error) {
    console.error('获取考勤统计失败:', error);
    throw error;
  }
};

/**
 * 获取当前员工的考勤统计
 * @param employeeId 员工工号
 * @param yearMonth 统计年月（如2025-02）
 * @returns 考勤统计数据
 */
export const getCurrentEmployeeAttendanceStatistics = async (employeeId: string, yearMonth?: string) => {
  const params: AttendanceStatisticsParams = {
    employeeId,
    yearMonth
  };
  
  try {
    const response = await getAttendanceStatistics(params);
    return response;
  } catch (error) {
    console.error(`获取员工 ${employeeId} 的考勤统计失败:`, error);
    throw error;
  }
};

/**
 * 获取部门的考勤统计
 * @param deptId 部门ID
 * @param params 其他查询参数
 * @returns 考勤统计数据
 */
export const getDepartmentAttendanceStatistics = async (deptId: number, params?: Omit<AttendanceStatisticsParams, 'deptId' | 'academyId' | 'otherDeptId'>) => {
  const queryParams: AttendanceStatisticsParams = {
    ...params,
    deptId
  };
  
  try {
    const response = await getAttendanceStatistics(queryParams);
    return response;
  } catch (error) {
    console.error(`获取部门 ${deptId} 的考勤统计失败:`, error);
    throw error;
  }
};

/**
 * 获取二级学院的考勤统计
 * @param academyId 二级学院ID
 * @param params 其他查询参数
 * @returns 考勤统计数据
 */
export const getAcademyAttendanceStatistics = async (academyId: number, params?: Omit<AttendanceStatisticsParams, 'deptId' | 'academyId' | 'otherDeptId'>) => {
  const queryParams: AttendanceStatisticsParams = {
    ...params,
    academyId
  };
  
  try {
    const response = await getAttendanceStatistics(queryParams);
    return response;
  } catch (error) {
    console.error(`获取二级学院 ${academyId} 的考勤统计失败:`, error);
    throw error;
  }
};

/**
 * 招聘计划转化率统计查询参数
 */
export interface RecruitStatisticsParams {
  page?: number;
  pageSize?: number;
  planId?: number;
  planType?: number; // 1:管理岗位 2:专任教师 3:其他岗位
}

/**
 * 招聘计划转化率统计项
 */
export interface RecruitStatisticsItem {
  planId: number;
  planName: string;
  allRecruitsNumber: number; // 招聘人数
  allApplicantNumber: number; // 申请人数
  allThroughNumber: number; // 通过人数
  allConversionRate: string; // 转化率
}

/**
 * 招聘计划转化率统计响应数据
 */
export interface RecruitStatisticsResponse {
  total: number;
  row: RecruitStatisticsItem[];
}

/**
 * 获取招聘计划转化率统计数据
 * @param params 查询参数
 * @returns 招聘计划转化率统计数据
 */
export const getRecruitStatistics = async (params?: RecruitStatisticsParams) => {
  try {
    const response = await apiClient.get('/statistics/recruit/announcements', { params });
    
    if (response.data && response.data.code === 1) {
      return response.data;
    } else {
      if (response.data && (response.data.data === "没有数据" || response.data.msg === "没有数据")) {
        return {
          code: 1,
          msg: "success",
          data: {
            total: 0,
            row: []
          }
        };
      }
      
      const errorMsg = response.data?.msg || '获取招聘计划转化率统计失败';
      console.error('获取招聘计划转化率统计失败:', {
        message: errorMsg,
        data: response.data
      });
      throw new Error(errorMsg);
    }
  } catch (error: any) {
    console.error('获取招聘计划转化率统计失败:', error);
    
    if (error.message && error.message.includes('没有数据')) {
      return {
        code: 1,
        msg: "success",
        data: {
          total: 0,
          row: []
        }
      };
    }
    
    if (error.response) {
      if (error.response.data && 
          (error.response.data.data === "没有数据" || error.response.data.msg === "没有数据")) {
        return {
          code: 1,
          msg: "success",
          data: {
            total: 0,
            row: []
          }
        };
      }
      
      throw new Error(
        error.response.data?.message || 
        error.response.data?.msg || 
        '服务器返回错误'
      );
    } else if (error.request) {
      throw new Error('服务器未响应');
    } else {
      throw error;
    }
  }
};

/**
 * 获取特定类型的招聘计划转化率统计
 * @param planType 计划类型 1:管理岗位 2:专任教师 3:其他岗位
 * @param params 其他查询参数
 * @returns 招聘计划转化率统计数据
 */
export const getRecruitStatisticsByType = async (planType: number, params?: Omit<RecruitStatisticsParams, 'planType'>) => {
  const queryParams: RecruitStatisticsParams = {
    ...params,
    planType
  };
  
  return getRecruitStatistics(queryParams);
};

/**
 * 获取特定招聘计划的转化率统计
 * @param planId 招聘计划ID
 * @param params 其他查询参数
 * @returns 招聘计划转化率统计数据
 */
export const getRecruitStatisticsByPlanId = async (planId: number, params?: Omit<RecruitStatisticsParams, 'planId'>) => {
  const queryParams: RecruitStatisticsParams = {
    ...params,
    planId
  };
  
  return getRecruitStatistics(queryParams);
};

/**
 * 面试通过率统计查询参数
 */
export interface InterviewStatisticsParams {
  page?: number;
  pageSize?: number;
  planId?: number;
  planType?: number; // 1:管理岗位 2:专任教师 3:其他岗位
  interviewId?: number;
  deptId?: string;
  positionNumber?: string;
}

/**
 * 面试通过率统计项
 */
export interface InterviewStatisticsItem {
  interviewId: number;
  interviewName: string;
  recruitsNumber: number; // 招聘人数
  applicantNumber: number; // 申请人数
  throughNumber: number; // 通过人数
  conversionRate: string; // 转化率
}

/**
 * 面试通过率统计响应数据
 */
export interface InterviewStatisticsResponse {
  total: number;
  row: InterviewStatisticsItem[];
}

/**
 * 获取面试通过率统计数据
 * @param params 查询参数
 * @returns 面试通过率统计数据
 */
export const getInterviewStatistics = async (params?: InterviewStatisticsParams) => {
  try {
    const response = await apiClient.get('/statistics/interview', { params });
    
    if (response.data && response.data.code === 1) {
      return response.data;
    } else {
      if (response.data && (response.data.data === "没有数据" || response.data.msg === "没有数据")) {
        return {
          code: 1,
          msg: "success",
          data: {
            total: 0,
            row: []
          }
        };
      }
      
      const errorMsg = response.data?.msg || '获取面试通过率统计失败';
      console.error('获取面试通过率统计失败:', {
        message: errorMsg,
        data: response.data
      });
      throw new Error(errorMsg);
    }
  } catch (error: any) {
    console.error('获取面试通过率统计失败:', error);
    
    if (error.message && error.message.includes('没有数据')) {
      return {
        code: 1,
        msg: "success",
        data: {
          total: 0,
          row: []
        }
      };
    }
    
    if (error.response) {
      if (error.response.data && 
          (error.response.data.data === "没有数据" || error.response.data.msg === "没有数据")) {
        return {
          code: 1,
          msg: "success",
          data: {
            total: 0,
            row: []
          }
        };
      }
      
      throw new Error(
        error.response.data?.message || 
        error.response.data?.msg || 
        '服务器返回错误'
      );
    } else if (error.request) {
      throw new Error('服务器未响应');
    } else {
      throw error;
    }
  }
};

/**
 * 获取特定类型的面试通过率统计
 * @param planType 计划类型 1:管理岗位 2:专任教师 3:其他岗位
 * @param params 其他查询参数
 * @returns 面试通过率统计数据
 */
export const getInterviewStatisticsByType = async (planType: number, params?: Omit<InterviewStatisticsParams, 'planType'>) => {
  const queryParams: InterviewStatisticsParams = {
    ...params,
    planType
  };
  
  return getInterviewStatistics(queryParams);
};

/**
 * 获取特定招聘计划的面试通过率统计
 * @param planId 招聘计划ID
 * @param params 其他查询参数
 * @returns 面试通过率统计数据
 */
export const getInterviewStatisticsByPlanId = async (planId: number, params?: Omit<InterviewStatisticsParams, 'planId'>) => {
  const queryParams: InterviewStatisticsParams = {
    ...params,
    planId
  };
  
  return getInterviewStatistics(queryParams);
};

/**
 * 获取特定面试的通过率统计
 * @param interviewId 面试ID
 * @param params 其他查询参数
 * @returns 面试通过率统计数据
 */
export const getInterviewStatisticsById = async (interviewId: number, params?: Omit<InterviewStatisticsParams, 'interviewId'>) => {
  const queryParams: InterviewStatisticsParams = {
    ...params,
    interviewId
  };
  
  return getInterviewStatistics(queryParams);
};

/**
 * 获取特定部门的面试通过率统计
 * @param deptId 部门ID
 * @param params 其他查询参数
 * @returns 面试通过率统计数据
 */
export const getInterviewStatisticsByDeptId = async (deptId: string, params?: Omit<InterviewStatisticsParams, 'deptId'>) => {
  const queryParams: InterviewStatisticsParams = {
    ...params,
    deptId
  };
  
  return getInterviewStatistics(queryParams);
};

/**
 * 获取特定岗位的面试通过率统计
 * @param positionNumber 岗位编号
 * @param params 其他查询参数
 * @returns 面试通过率统计数据
 */
export const getInterviewStatisticsByPosition = async (positionNumber: string, params?: Omit<InterviewStatisticsParams, 'positionNumber'>) => {
  const queryParams: InterviewStatisticsParams = {
    ...params,
    positionNumber
  };
  
  return getInterviewStatistics(queryParams);
};
